#pragma once
#include<iostream>
#include <pthread.h>

typedef void*(*func_t)(void*);

class ThreadData
{
public:
    void* _args;
    std::string _name;
};
class Thread
{
public:
    Thread(int num,func_t callback,void* args)
    :_func(callback)
    {
        char namebuffer[1024];
        snprintf(namebuffer,sizeof(namebuffer),"Thread-%d",num);
        _name=namebuffer;
        _tdata._name=namebuffer;
        _tdata._args=args;
    }
    void Start()
    {
        pthread_create(&_tid, nullptr, _func, (void*)&_tdata);
    }
    void join(){
        pthread_join(_tid,nullptr);
    }
    std::string Name(){
        return _name;
    }
    ~Thread(){

    }
private:
    std::string _name;
    func_t _func;
    pthread_t _tid;
    ThreadData _tdata;
};
// typedef void*(*func_t)(void*);

// class ThreaData
// {
// public:
//     std::string _name;
//     void* _args;
// };
// class Thread
// {
// public:
// //这个线程在要创建的时候就已经要建立好序号和线程的执行方法
// //以及线程方法的参数
//     Thread(int num,func_t callback,void* args)
//     :_func(callback)
//     {
//         char namebuffer[1024];
//         snprintf(namebuffer,sizeof(namebuffer),"Thread-%d",num);
//         _name=namebuffer;
//         _tdata._name=_name;
//         _tdata._args=args;
//     }
//     void Start()
//     {
//         pthread_create(&_tid, nullptr, _func, (void*)&_tdata);
//     }
//     void join(){
//         pthread_join(_tid,nullptr);
//     }
//     std::string name(){
//         return _name;
//     }
//     ~Thread(){
        
//     }
// private:
//     std::string _name;
//     func_t _func;
//     ThreaData _tdata;
//     pthread_t _tid;
// };

